package code1.binary_tree;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 原题链接：https://leetcode.cn/problems/invert-binary-tree/
 */
public class P226 {

    //翻转二叉树思想：遍历每一个节点，交换它的左右孩子

    //递归法
    public TreeNode invertTree(TreeNode root) {
        if(root!=null){
            swap(root);         //先序遍历
            invertTree(root.left);
            invertTree(root.right);
        }
        return root;
    }

    private void swap(TreeNode root) {
        TreeNode tmp=root.left;
        root.left=root.right;
        root.right=tmp;
    }

    //层序遍历法
    public TreeNode invertTree2(TreeNode root) {
        if (root==null){
            return root;
        }
        Queue<TreeNode> queue=new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()){
            TreeNode node = queue.poll();
            swap(node);
            if(node.left!=null){
                queue.offer(node.left);
            }
            if(node.right!=null){
                queue.offer(node.right);
            }
        }
        return root;
    }
}
